QuickSight の制限付き共有フォルダにグループの権限を付与し、ユーザーを追加する運用が可能か検証してみた

QuickSight の制限付き共有フォルダにグループの権限を付与し、ユーザーを追加する運用が可能か検証してみた

QuickSight の制限付き共有フォルダでも、グループを使ったアクセス権限の運用が可能なことが分かりました。記事に手順を記載します。
Clock Icon2024.09.24

コーヒーが好きな emi です。

QuickSight の制限付き共有フォルダは QuickSight コンソールから作成・編集することができず、AWS CLI などの API でしか操作できません。
制限付き共有フォルダへのアクセス権限追加・削除・変更等の操作手順を一通り試してみましたので共有します。

グループを作成しユーザーを追加

グループ「Group1-shared-restricted-folder」を作成し、ユーザー「DataAnalysisUser1」を追加します。

ユーザーとグループの作成方法は以下の記事を参考にしてください。
https://dev.classmethod.jp/articles/create-and-delete-quicksight-users-groups/

emiki_qs_restricted_shared_folder_operations_9

制限付き共有フォルダを作成しグループに寄稿者の権限を付与

制限付き共有フォルダ「Shared restricted folder for Group1」を作成し、グループ「Group1-shared-restricted-folder」に寄稿者の権限を付与します。

emiki_qs_restricted_shared_folder_operations_1

以降の AWS CLI コマンドは CloudShell で実行していきます。
まずグループの ARN を取得します。

list-groups — AWS CLI 2.17.56 Command Reference

aws quicksight list-groups --aws-account-id 123456789012 --namespace default

▼実行結果

[cloudshell-user@ip-10-132-71-74 ~]$ aws quicksight list-groups --aws-account-id 123456789012 --namespace default
{
    "GroupList": [
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
            "GroupName": "Group1-shared-restricted-folder",
            "Description": "Group1-shared-restricted-folder",
            "PrincipalId": "group/d-xxxxxxxxxx/dad44c5d-90ef-4e64-a334-7da864c52db0"
        }
    ],
    "Status": 200,
    "RequestId": "a3dcc7b4-f279-474b-ba12-04a6230f6fa2"
}
[cloudshell-user@ip-10-132-71-74 ~]$ 

グループ「Group1-shared-restricted-folder」の ARN は arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder であることが分かりました。

制限付き共有フォルダの作成方法は以下の記事を参考にしてください。
https://dev.classmethod.jp/articles/quicksight-restricted-shared-folders-cli-skeleton/

create-folder コマンドを使って CloudShell から制限付き共有フォルダを作成します。

CLI スケルトンを使って JSON 形式でパラメーターを指定していきます。
まず --generate-cli-skeleton パラメーターを指定して、JSON のひな形をファイルに保存します。

aws quicksight create-folder --generate-cli-skeleton > create-folder-for-gp1.json

▼実行結果

[cloudshell-user@ip-10-132-71-74 ~]$ aws quicksight create-folder --generate-cli-skeleton > create-folder-for-gp1.json
[cloudshell-user@ip-10-132-71-74 ~]$ 

lscat でファイルが作成されたことを確認します。

[cloudshell-user@ip-10-132-71-74 ~]$ ls
create-folder-hoge.json
[cloudshell-user@ip-10-132-71-74 ~]$ 
[cloudshell-user@ip-10-132-71-74 ~]$ cat create-folder-for-gp1.json
{
    "AwsAccountId": "",
    "FolderId": "",
    "Name": "",
    "FolderType": "SHARED",
    "ParentFolderArn": "",
    "Permissions": [
        {
            "Principal": "",
            "Actions": [
                ""
            ]
        }
    ],
    "Tags": [
        {
            "Key": "",
            "Value": ""
        }
    ],
    "SharingModel": "ACCOUNT"
}
[cloudshell-user@ip-10-132-71-74 ~]$ 

JSON を以下のように編集します。

create-folder-for-gp1.json
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "Name": "Shared restricted folder for Group1",
    "FolderType": "RESTRICTED",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}

これは、グループ「Group1-shared-restricted-folder」に寄稿者権限を付与した制限付き共有フォルダを作成する設定です。
vi エディタなどで作成した JSON ファイルを編集してください。編集後、cat コマンドで JSON ファイルが正しく変更されていることを確認します。

[cloudshell-user@ip-10-132-71-74 ~]$ cat create-folder-for-gp1.json 
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "Name": "Shared restricted folder for Group1",
    "FolderType": "RESTRICTED",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}
[cloudshell-user@ip-10-132-71-74 ~]$  

では、制限付き共有フォルダを作成します。

aws quicksight create-folder \
  --cli-input-json file://create-folder-for-gp1.json

▼実行結果

[cloudshell-user@ip-10-132-71-74 ~]$ aws quicksight create-folder \
>   --cli-input-json file://create-folder-for-gp1.json
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_group1",
    "FolderId": "shared_restricted_folder_for_group1",
    "RequestId": "1e3c8c25-3597-487a-a58e-6ce4214ed0df"
}
[cloudshell-user@ip-10-132-71-74 ~]$ 

制限付き共有フォルダ「Shared restricted folder for Group1」が作成されたことを確認します。

emiki_qs_restricted_shared_folder_operations_10

「フォルダへのアクセス権限の表示」で、権限も設定どおりになっていることが分かります。

emiki_qs_restricted_shared_folder_operations_11

アセットを作成

作成した制限付き共有フォルダにアセットを追加します。
アセットとは、データソース、データセット、分析、ダッシュボード等の QuickSight リソースの総称です。

ブログの 制限付き共有フォルダ内にアセットを作成する を参考にアセットを作成します。

emiki_qs_restricted_shared_folder_operations_13

グループにユーザーを追加し制限付き共有フォルダのアセットにアクセスできるか確認

以降の検証のために QuickSight ユーザーを追加します。

  • DataAnalysisUser2
  • DataAnalysisUser3
  • DataAnalysisUser4
  • DataAnalysisUser5

emiki_qs_restricted_shared_folder_operations_2

emiki_qs_restricted_shared_folder_operations_14

DataAnalysisUser2 で QuickSight にログインしました。
制限付き共有フォルダは見えません。
emiki_qs_restricted_shared_folder_operations_15

グループ「Group1-shared-restricted-folder」にユーザー「DataAnalysisUser2」を追加します。

emiki_qs_restricted_shared_folder_operations_3

emiki_qs_restricted_shared_folder_operations_16

DataAnalysisUser2 で制限付き共有フォルダ「Shared restricted folder for Group1」が見えるようになりました。制限付き共有フォルダ内のアセットも操作できます。
emiki_qs_restricted_shared_folder_operations_17

emiki_qs_restricted_shared_folder_operations_18

グループからユーザーを削除し、制限付き共有フォルダにアクセスできなくなることを確認

グループ「Group1-shared-restricted-folder」からユーザー「DataAnalysisUser2」を削除します。
emiki_qs_restricted_shared_folder_operations_19

emiki_qs_restricted_shared_folder_operations_20

ユーザー「DataAnalysisUser2」を削除してすぐは制限付き共有フォルダのアセットが見えていましたが、2 分程で見えなくなりました。少し反映に時間がかかるようです。
emiki_qs_restricted_shared_folder_operations_21

二つのグループを寄稿者として権限追加

以下のようにグループを二つ追加で作成し、二つ同時に寄稿者として権限追加できるか検証します。

  • グループ「Group2-shared-restricted-folder」
    • ユーザー「DataAnalysisUser3」を追加
  • グループ「Group3-shared-restricted-folder」
    • ユーザー「DataAnalysisUser4」を追加

emiki_qs_restricted_shared_folder_operations_4

emiki_qs_restricted_shared_folder_operations_22

emiki_qs_restricted_shared_folder_operations_23

emiki_qs_restricted_shared_folder_operations_24

制限付き共有フォルダの権限編集は update-folder-permissions コマンドでおこないます。

CLI スケルトンを使って JSON 形式でパラメーターを指定していきます。
まず --generate-cli-skeleton パラメーターを指定して、JSON のひな形をファイルに保存します。

aws quicksight update-folder-permissions --generate-cli-skeleton > update-folder-1.json

▼実行結果

[cloudshell-user@ip-10-132-73-217 ~]$ aws quicksight update-folder-permissions --generate-cli-skeleton > update-folder-1.json
[cloudshell-user@ip-10-132-73-217 ~]$

lscat update-folder-1.json コマンドでファイルが作成されたことを確認します。

[cloudshell-user@ip-10-132-73-217 ~]$ ls
create-folder-for-gp1.json  update-folder-1.json
[cloudshell-user@ip-10-132-73-217 ~]$ cat update-folder-1.json
{
    "AwsAccountId": "",
    "FolderId": "",
    "GrantPermissions": [
        {
            "Principal": "",
            "Actions": [
                ""
            ]
        }
    ],
    "RevokePermissions": [
        {
            "Principal": "",
            "Actions": [
                ""
            ]
        }
    ]
}
[cloudshell-user@ip-10-132-73-217 ~]$ 

list-groups でグループの ARN を取得します。

[cloudshell-user@ip-10-132-73-217 ~]$ aws quicksight list-groups --aws-account-id 123456789012 --namespace default
{
    "GroupList": [
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
            "GroupName": "Group1-shared-restricted-folder",
            "Description": "Group1-shared-restricted-folder",
            "PrincipalId": "group/d-xxxxxxxxxx/dad44c5d-90ef-4e64-a334-7da864c52db0"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "GroupName": "Group2-shared-restricted-folder",
            "Description": "Group2-shared-restricted-folder",
            "PrincipalId": "group/d-xxxxxxxxxx/9e604e53-d23b-409a-8c0e-e8dec2b5b756"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder",
            "GroupName": "Group3-shared-restricted-folder",
            "Description": "Group3-shared-restricted-folder",
            "PrincipalId": "group/d-xxxxxxxxxx/b3b77fd0-cba8-422a-9d91-dee21c9bcfa0"
        }
    ],
    "Status": 200,
    "RequestId": "3108fab7-5eb2-4d0a-a982-c1df7fa46d91"
}
[cloudshell-user@ip-10-132-73-217 ~]$ 

グループ「Group2-shared-restricted-folder」と「Group3-shared-restricted-folder」の ARN はそれぞれ以下であることが確認できました。

  • "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder"
  • "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder"

JSON ファイル「update-folder-1.json」を以下のように修正します。

update-folder-1.json
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}

vi エディタなどで編集後、cat で JSON ファイルが正しく変更されていることを確認します。

[cloudshell-user@ip-10-134-7-138 ~]$ cat update-folder-1.json 
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}
[cloudshell-user@ip-10-134-7-138 ~]$ 

では、制限付き共有フォルダの権限を更新します。

aws quicksight update-folder-permissions \
  --cli-input-json file://update-folder-1.json

▼実行結果

[cloudshell-user@ip-10-132-73-217 ~]$ aws quicksight update-folder-permissions \
>   --cli-input-json file://update-folder-1.json
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_group1",
    "FolderId": "shared_restricted_folder_for_group1",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ],
    "RequestId": "b77ad1c2-0da5-4b5d-a0c6-37b4362341be"
}
[cloudshell-user@ip-10-132-73-217 ~]$ 

制限付き共有フォルダの「View permissions」から、フォルダへのアクセス権限が追加されていることが確認できます。
emiki_qs_restricted_shared_folder_operations_25

emiki_qs_restricted_shared_folder_operations_26

DataAnalysisUser3、DataAnalysisUser4 でログインし、制限付き共有フォルダ「Shared restricted folder for Group1」が見えるか確認します。
emiki_qs_restricted_shared_folder_operations_27

emiki_qs_restricted_shared_folder_operations_28

見えました。分析なども操作できます。

グループの権限を削除し、ユーザーに表示者権限を追加

ユーザー「DataAnalysisUser4」を含むグループ「Group3-shared-restricted-folder」の寄稿者権限を削除し、ユーザー「DataAnalysisUser5」単体を表示者(閲覧者。読み取りのみ)権限で追加してみます。

emiki_qs_restricted_shared_folder_operations_5

先ほどと同様に update-folder-permissions コマンドで CLI スケルトンの JSON を作成します。

[cloudshell-user@ip-10-132-73-217 ~]$ aws quicksight update-folder-permissions --generate-cli-skeleton > update-folder-2.json
[cloudshell-user@ip-10-132-73-217 ~]$ ls
create-folder-for-gp1.json  update-folder-1.json  update-folder-2.json
[cloudshell-user@ip-10-132-73-217 ~]$ cat update-folder-2.json 
{
    "AwsAccountId": "",
    "FolderId": "",
    "GrantPermissions": [
        {
            "Principal": "",
            "Actions": [
                ""
            ]
        }
    ],
    "RevokePermissions": [
        {
            "Principal": "",
            "Actions": [
                ""
            ]
        }
    ]
}
[cloudshell-user@ip-10-132-73-217 ~]$ 

今度は list-users コマンドでユーザーの ARN を取得します。

aws quicksight list-users --aws-account-id 123456789012 --namespace default

▼実行結果

[cloudshell-user@ip-10-134-7-138 ~]$ aws quicksight list-users --aws-account-id 123456789012 --namespace default
{
    "UserList": [
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_AWSAdministratorAccess_4b32xxxxxxxxxx/KitaniEmi",
            "UserName": "AWSReservedSSO_AWSAdministratorAccess_4b32xxxxxxxxxx/KitaniEmi",
            "Email": "000@example.com",
            "Role": "ADMIN",
            "IdentityType": "IAM",
            "Active": true,
            "PrincipalId": "federated/iam/AROAXXXXXXXXXX:KitaniEmi"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1",
            "UserName": "AWSReservedSSO_QuickSightFullAccess_af51xxxxxxxxxx/DataAnalysisUser1",
            "Email": "111@example.com",
            "Role": "ADMIN",
            "IdentityType": "IAM",
            "Active": true,
            "PrincipalId": "federated/iam/AROAXXXXXXXXXX:DataAnalysisUser1"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/AWSReservedSSO_AWSPowerUserAccess_e0b5xxxxxxxxxx/KitaniEmi",
            "UserName": "AWSReservedSSO_AWSPowerUserAccess_e0b5xxxxxxxxxx/KitaniEmi",
            "Email": "0000@example.com",
            "Role": "ADMIN",
            "IdentityType": "IAM",
            "Active": true,
            "PrincipalId": "federated/iam/AROAXXXXXXXXXX:KitaniEmi"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser3",
            "UserName": "DataAnalysisUser3",
            "Email": "333@example.com",
            "Role": "AUTHOR",
            "IdentityType": "QUICKSIGHT",
            "Active": true,
            "PrincipalId": "user/d-xxxxxxxxxx/271dc488-6056-47fb-86f1-e42ef2e24152"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser5",
            "UserName": "DataAnalysisUser5",
            "Email": "555@example.com",
            "Role": "AUTHOR",
            "IdentityType": "QUICKSIGHT",
            "Active": true,
            "PrincipalId": "user/d-xxxxxxxxxx/29d20cde-93d6-4d3a-8850-2bf1b3e78835"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser2",
            "UserName": "DataAnalysisUser2",
            "Email": "222@example.com",
            "Role": "AUTHOR",
            "IdentityType": "QUICKSIGHT",
            "Active": true,
            "PrincipalId": "user/d-xxxxxxxxxx/424cc47f-7c72-410a-ba89-2ba4e9e504ab"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser4",
            "UserName": "DataAnalysisUser4",
            "Email": "444@example.com",
            "Role": "AUTHOR",
            "IdentityType": "QUICKSIGHT",
            "Active": true,
            "PrincipalId": "user/d-xxxxxxxxxx/5d89fe28-52ec-4f96-93ba-c183278caef4"
        }
    ],
    "Status": 200,
    "RequestId": "2dd7b140-f15d-478a-ba0b-4f83cd93a439"
}
[cloudshell-user@ip-10-134-7-138 ~]$ 

ユーザー「DataAnalysisUser5」の ARN は arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser5 であることが分かりました。

「Group3-shared-restricted-folder」の寄稿者権限を削除し、「DataAnalysisUser5」の表示者権限を追加するように JSON ファイル「update-folder-2.json」を編集します。

update-folder-2.json
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser5",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        }
    ],
    "RevokePermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}

vi エディタなどで編集後、cat で JSON ファイルが正しく変更されていることを確認します。

[cloudshell-user@ip-10-134-7-138 ~]$ cat update-folder-2.json 
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser5",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        }
    ],
    "RevokePermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}
[cloudshell-user@ip-10-134-7-138 ~]$ 

では、制限付き共有フォルダの権限を更新します。

aws quicksight update-folder-permissions \
  --cli-input-json file://update-folder-2.json

▼実行結果

[cloudshell-user@ip-10-134-7-138 ~]$ aws quicksight update-folder-permissions \
>   --cli-input-json file://update-folder-2.json
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_group1",
    "FolderId": "shared_restricted_folder_for_group1",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser5",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ],
    "RequestId": "1e3871b8-3b30-410a-8971-731f87ef95c7"
}
[cloudshell-user@ip-10-134-7-138 ~]$ 

制限付き共有フォルダの「View permissions」から、フォルダへのアクセス権限が変更されていることを確認します。
emiki_qs_restricted_shared_folder_operations_29

グループ「Group3-shared-restricted-folder」のアクセス権限は消えており、ユーザー「DataAnalysisUser5」の表示者権限が追加されています。
emiki_qs_restricted_shared_folder_operations_30

DataAnalysisUser4 でログインし、制限付き共有フォルダ「Shared restricted folder for Group1」が見えなくなったか確認します。
emiki_qs_restricted_shared_folder_operations_31

見えないですね。想定通りです。

DataAnalysisUser5 でログインし、制限付き共有フォルダ「Shared restricted folder for Group1」が見えるか確認します。
emiki_qs_restricted_shared_folder_operations_32

emiki_qs_restricted_shared_folder_operations_33

見えました。先ほどと違い分析は表示されておらず、ダッシュボードは表示されているものの「削除」が表示されなくなっています。表示者としての権限が適用されていることが確認できました。
emiki_qs_restricted_shared_folder_operations_34

ダッシュボードを閲覧することはできます。
emiki_qs_restricted_shared_folder_operations_35

データセットも表示できますが、メニューは表示されません。
emiki_qs_restricted_shared_folder_operations_36

データソースも見てみます。「データセットの作成」が押下できるようなので進んでみます。
emiki_qs_restricted_shared_folder_operations_37

「カスタム SQL を使用」が押下できるので進んでみます。
emiki_qs_restricted_shared_folder_operations_38

「データの編集/プレビュー」が押下できるので進んでみます。
emiki_qs_restricted_shared_folder_operations_39

カスタム SQL でデータをクエリするところまでできました。
emiki_qs_restricted_shared_folder_operations_40

「保存して公開」や「保存して視覚化」を押下すると「このアクションを実行できません」となりました。閉じてキャンセルします。
emiki_qs_restricted_shared_folder_operations_41

グループの権限を寄稿者から表示者に変更する

ユーザー「DataAnalysisUser3」を含む「Group2-shared-restricted-folder」の寄稿者権限を表示者(閲覧者)権限に変更します。

emiki_qs_restricted_shared_folder_operations_6

update-folder-permissions でこれまで同様 CLI スケルトンの JSON ファイルを作成します。

update-folder-3.json
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        }
    ]
}

cat で JSON ファイルが保存できているか確認します。

[cloudshell-user@ip-10-134-7-138 ~]$ cat update-folder-3.json 
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        }
    ]
}
[cloudshell-user@ip-10-134-7-138 ~]$

アクセス権限を更新します。

aws quicksight update-folder-permissions \
  --cli-input-json file://update-folder-3.json

▼実行結果

[cloudshell-user@ip-10-134-7-138 ~]$ aws quicksight update-folder-permissions \
>   --cli-input-json file://update-folder-3.json
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_group1",
    "FolderId": "shared_restricted_folder_for_group1",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/DataAnalysisUser5",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        },
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group1-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ],
    "RequestId": "38c7582f-96bc-4105-b2fa-cc135757fed7"
}
[cloudshell-user@ip-10-134-7-138 ~]$ 

制限付き共有フォルダの「View permissions」から権限が変更されたか確認します。
emiki_qs_restricted_shared_folder_operations_42

emiki_qs_restricted_shared_folder_operations_43
「Group2-shared-restricted-folder」の寄稿者権限が表示者権限に変わっていることが確認できました。

ユーザー「DataAnalysisUser3」でログインすると、先ほどと異なり分析が表示されず、ダッシュボードは閲覧できますが「削除」操作は表示されなくなっています。
emiki_qs_restricted_shared_folder_operations_44

emiki_qs_restricted_shared_folder_operations_45

emiki_qs_restricted_shared_folder_operations_46

アセットの削除

寄稿者の権限があれば、QuickSight コンソール上 GUI 操作でアセットを削除できます。
emiki_qs_restricted_shared_folder_operations_7

ダッシュボードを削除します。
emiki_qs_restricted_shared_folder_operations_47

emiki_qs_restricted_shared_folder_operations_48

分析を削除します。
emiki_qs_restricted_shared_folder_operations_49

emiki_qs_restricted_shared_folder_operations_50

データセットを削除します。
emiki_qs_restricted_shared_folder_operations_51

emiki_qs_restricted_shared_folder_operations_52

emiki_qs_restricted_shared_folder_operations_53

データソースを削除します。
emiki_qs_restricted_shared_folder_operations_54

emiki_qs_restricted_shared_folder_operations_55

emiki_qs_restricted_shared_folder_operations_56

制限付き共有フォルダ内のアセットをすべて削除できました。
emiki_qs_restricted_shared_folder_operations_57

制限付き共有フォルダの削除

最後に制限付き共有フォルダを削除します。

emiki_qs_restricted_shared_folder_operations_8

制限付き共有フォルダの削除は delete-folder コマンドでおこないます。

まずはそのまま実行してみます。

aws quicksight delete-folder

▼実行結果

[cloudshell-user@ip-10-130-58-177 ~]$ aws quicksight delete-folder

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

aws: error: the following arguments are required: --aws-account-id, --folder-id

[cloudshell-user@ip-10-130-58-177 ~]$ 

引数として --aws-account-id--folder-id が必要であることが分かりました。
--folder-id を調べるには list-folders コマンドを使います。

まずはそのまま実行してみます。

aws quicksight list-folders

▼実行結果

[cloudshell-user@ip-10-130-58-177 ~]$ aws quicksight list-folders

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

aws: error: the following arguments are required: --aws-account-id

[cloudshell-user@ip-10-130-58-177 ~]$ 

引数として --aws-account-id が必要であることが分かったので、--aws-account-id を指定して実行します。

aws quicksight list-folders --aws-account-id 123456789012

▼実行結果

[cloudshell-user@ip-10-134-17-197 ~]$ aws quicksight list-folders --aws-account-id 123456789012
{
    "FolderSummaryList": [
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/xxxxxxxxxx",
            "FolderId": "xxxxxxxxxx",
            "Name": "XXXXX XXXXX",
            "FolderType": "RESTRICTED",
            "CreatedTime": "2024-09-13T04:43:02.386000+00:00",
            "LastUpdatedTime": "2024-09-13T04:43:02.386000+00:00",
            "SharingModel": "ACCOUNT"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/yyyyyyyyyy",
            "FolderId": "yyyyyyyyyy",
            "Name": "YYYYY YYYYYY",
            "FolderType": "RESTRICTED",
            "CreatedTime": "2024-08-26T14:18:33.519000+00:00",
            "LastUpdatedTime": "2024-08-26T14:18:33.519000+00:00",
            "SharingModel": "ACCOUNT"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/zzzzzzzzzz",
            "FolderId": "zzzzzzzzzz",
            "Name": "ZZZZZ ZZZZZZ",
            "FolderType": "RESTRICTED",
            "CreatedTime": "2024-08-27T01:30:49.081000+00:00",
            "LastUpdatedTime": "2024-08-27T01:30:49.081000+00:00",
            "SharingModel": "ACCOUNT"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/90278753-a06b-4aa0-ba31-99f5e74fc2c5",
            "FolderId": "90278753-a06b-4aa0-ba31-",
            "Name": "Shared folder",
            "FolderType": "SHARED",
            "CreatedTime": "2024-08-26T13:24:21.516000+00:00",
            "LastUpdatedTime": "2024-08-26T13:24:21.516000+00:00",
            "SharingModel": "ACCOUNT"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_group1",
            "FolderId": "shared_restricted_folder_for_group1",
            "Name": "Shared restricted folder for Group1",
            "FolderType": "RESTRICTED",
            "CreatedTime": "2024-09-17T00:43:21.851000+00:00",
            "LastUpdatedTime": "2024-09-17T05:36:04.315000+00:00",
            "SharingModel": "ACCOUNT"
        },
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/uuuuuuuuuu",
            "FolderId": "uuuuuuuuuu",
            "Name": "UUUUU UUUUUU",
            "FolderType": "RESTRICTED",
            "CreatedTime": "2024-09-23T13:25:17.719000+00:00",
            "LastUpdatedTime": "2024-09-23T13:25:17.719000+00:00",
            "SharingModel": "ACCOUNT"
        }
    ],
    "Status": 200,
    "RequestId": "be5840a7-68f6-47b5-9f1b-e33aed560b1c"
}
[cloudshell-user@ip-10-134-17-197 ~]$ 

制限付き共有フォルダ「shared_restricted_folder_for_group1」のフォルダー ID は shared_restricted_folder_for_group1 であることが分かりました。

では、制限付き共有フォルダ「shared_restricted_folder_for_group1」を削除します。

aws quicksight delete-folder --aws-account-id 123456789012 --folder-id shared_restricted_folder_for_group1

▼実行結果

[cloudshell-user@ip-10-134-17-197 ~]$ aws quicksight delete-folder --aws-account-id 123456789012 --folder-id shared_restricted_folder_for_group1
{
    "Status": 200,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:folder/shared_restricted_folder_for_group1",
    "FolderId": "shared_restricted_folder_for_group1",
    "RequestId": "684184e8-5bc8-43ab-a022-017bb493e4d5"
}
[cloudshell-user@ip-10-134-17-197 ~]$ 

制限付き共有フォルダが削除できました。

失敗談

いくつか途中で失敗したので、失敗コマンドも紹介します。

二つのグループを寄稿者として権限追加する際の失敗

以下のように Principal を複数指定しようとしたらエラーになりました。

update-folder-1.json
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": {
                "AWS": [
                    "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
                    "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder"
                ]
            },
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}
aws quicksight update-folder-permissions \
  --cli-input-json file://update-folder-1.json

▼実行結果

[cloudshell-user@ip-10-132-73-217 ~]$ aws quicksight update-folder-permissions \
>   --cli-input-json file://update-folder-1.json

Parameter validation failed:
Invalid type for parameter GrantPermissions[0].Principal, value: {'AWS': ['arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder', 'arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group3-shared-restricted-folder']}, type: <class 'dict'>, valid types: <class 'str'>
[cloudshell-user@ip-10-132-73-217 ~]$ 

一度に二つ以上の Principal に権限を追加する際は、ブロックを複数記述する必要があるようです。

グループの権限を寄稿者から表示者に変更する際の失敗

"quicksight:DescribeFolder" 以外の権限を削除することを狙って以下のように RevokePermissions を指定したらエラーになりました。

update-folder-3.json 失敗
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        }
    ],
    "RevokePermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}

▼実行結果

[cloudshell-user@ip-10-134-7-138 ~]$ aws quicksight update-folder-permissions \
>   --cli-input-json file://update-folder-3.json

An error occurred (InvalidParameterValueException) when calling the UpdateFolderPermissions operation: ResourcePermission list contains unsupported permission sets [quicksight:CreateFolderMembership, quicksight:CreateFolder, quicksight:DeleteFolderMembership, quicksight:DescribeFolderPermissions] for this resource. Valid sets : [quicksight:DescribeFolder] or [quicksight:CreateFolder, quicksight:DescribeFolder, quicksight:CreateFolderMembership, quicksight:DeleteFolderMembership, quicksight:DescribeFolderPermissions] or [quicksight:CreateFolder, quicksight:DescribeFolder, quicksight:UpdateFolder, quicksight:DeleteFolder, quicksight:CreateFolderMembership, quicksight:DeleteFolderMembership, quicksight:DescribeFolderPermissions, quicksight:UpdateFolderPermissions]
[cloudshell-user@ip-10-134-7-138 ~]$ 

(機械翻訳)

UpdateFolderPermissions オペレーションの呼び出し時にエラーが発生しました(InvalidParameterValueException): ResourcePermissionリストに、このリソースでサポートされていない権限セット[quicksight:CreateFolderMembership、quicksight:CreateFolder、quicksight:DeleteFolderMembership、quicksight:DescribeFolderPermissions]が含まれています。 UpdateFolder、quicksight:DeleteFolder、quicksight:CreateFolderMembership、quicksight:DeleteFolderMembership、quicksight:DescribeFolderPermissions、quicksight:UpdateFolderPermissions]CreateFolder操作の呼び出し時にエラーが発生しました(InvalidParameterValueException): アクセス許可に、制限付きフォルダのサポートされていないアクセス許可セットが含まれています。有効なセットです: 有効なセット:[quicksight:CreateFolder、quicksight:DescribeFolder、quicksight:CreateFolderMembership、quicksight:DeleteFolderMembership、quicksight:DescribeFolderPermissions] または [quicksight:DescribeFolder]。

権限セットが正しくないということで、一旦寄稿者の権限を削除してから表示者の権限を追加しようと思い、以下のように設定しましたがエラーになりました。

update-folder-3.json 失敗
{
    "AwsAccountId": "123456789012",
    "FolderId": "shared_restricted_folder_for_group1",
    "GrantPermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:DescribeFolder"
            ]
        }
    ],
    "RevokePermissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder",
            "Actions": [
                "quicksight:CreateFolder",
                "quicksight:DescribeFolder",
                "quicksight:CreateFolderMembership",
                "quicksight:DeleteFolderMembership",
                "quicksight:DescribeFolderPermissions"
            ]
        }
    ]
}

▼実行結果

[cloudshell-user@ip-10-134-7-138 ~]$ aws quicksight update-folder-permissions \
>   --cli-input-json file://update-folder-3.json

An error occurred (InvalidParameterValueException) when calling the UpdateFolderPermissions operation: The request is ambiguous as grantPermissions and revokePermissions for principal arn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folder contain permission overlaps
[cloudshell-user@ip-10-134-7-138 ~]$ 

(機械翻訳)

UpdateFolderPermissions オペレーションの呼び出し時にエラーが発生しました(InvalidParameterValueException): プリンシパルarn:aws:quicksight:ap-northeast-1:123456789012:group/default/Group2-shared-restricted-folderに対するgrantPermissionsとrevokePermissionsにパーミッションの重複が含まれているため、要求があいまいです。

成功パターンはブログ記事上部に記載した通り、表示者権限の追加のみで良いです。

制限付き共有フォルダ内にアセットが存在すると制限付き共有フォルダを削除できない

制限付き共有フォルダ内にアセットが存在すると制限付き共有フォルダを削除できませんでした。

▼実行結果

[cloudshell-user@ip-10-134-17-197 ~]$ aws quicksight delete-folder --aws-account-id 123456789012 --folder-id shared_restricted_folder_for_group1

An error occurred (PreconditionNotMetException) when calling the DeleteFolder operation: folder not empty
[cloudshell-user@ip-10-134-17-197 ~]$ 

(機械翻訳)

DeleteFolder 操作の呼び出し時にエラーが発生しました(PreconditionNotMetException): フォルダが空ではありません。

参考

https://dev.classmethod.jp/articles/quicksight-restricted-folder/

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.